home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / xsdl19991217 / XSDLReader.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  22.1 KB  |  1,095 lines

  1. package com.extensibility.xml.xsdl19991217;
  2.  
  3. import com.extensibility.util.Debug;
  4. import com.extensibility.xml.AttributeDeclaration;
  5. import com.extensibility.xml.BaseDeclaration;
  6. import com.extensibility.xml.Comment;
  7. import com.extensibility.xml.ContentModel;
  8. import com.extensibility.xml.ContentModelTerm;
  9. import com.extensibility.xml.DTDUtilities;
  10. import com.extensibility.xml.DataTypeDeclaration;
  11. import com.extensibility.xml.ElementDeclaration;
  12. import com.extensibility.xml.ExternalGEDeclaration;
  13. import com.extensibility.xml.ExternalPEDeclaration;
  14. import com.extensibility.xml.ExternalSubset;
  15. import com.extensibility.xml.NamespaceDeclaration;
  16. import com.extensibility.xml.NotationDeclaration;
  17. import com.extensibility.xml.ParserException;
  18. import com.extensibility.xml.ProcessingInstruction;
  19. import com.extensibility.xml.SchemaIntf;
  20. import com.extensibility.xml.SchemaUtilities;
  21. import com.extensibility.xml.TypeRef;
  22. import com.extensibility.xml.URI;
  23. import com.extensibility.xml.dt.DataType;
  24. import com.extensibility.xml.dt.DataTypeFactory;
  25. import com.extensibility.xml.dt.DataTypeIntf;
  26. import com.extensibility.xml.dt.Facet;
  27. import java.io.FileNotFoundException;
  28. import java.io.IOException;
  29. import java.io.Reader;
  30. import java.net.UnknownHostException;
  31. import java.util.Hashtable;
  32. import java.util.Stack;
  33. import java.util.Vector;
  34. import org.xml.sax.AttributeList;
  35. import org.xml.sax.HandlerBase;
  36. import org.xml.sax.InputSource;
  37. import org.xml.sax.Locator;
  38. import org.xml.sax.Parser;
  39. import org.xml.sax.SAXException;
  40. import org.xml.sax.SAXParseException;
  41. import org.xml.sax.helpers.LocatorImpl;
  42.  
  43. public final class XSDLReader extends HandlerBase implements XSDLTags {
  44.    private Hashtable elemDecls;
  45.    private Hashtable dtElemNames;
  46.    private Hashtable currentAttrs;
  47.    private ElementDeclaration currentElemDecl;
  48.    private DataTypeDeclaration currentDataTypeDecl;
  49.    private String topLevelElemName;
  50.    private String currentElemName;
  51.    private AttributeDeclaration currentAttrDecl;
  52.    private Vector attrChoices;
  53.    private Vector elemDeclAttrs;
  54.    private Hashtable namespaces;
  55.    private SchemaIntf schema;
  56.    private ContentModel currentCM;
  57.    private boolean isFirstLevelCM;
  58.    private boolean cmClosed;
  59.    private Stack cmConnectors;
  60.    private Stack contentModels;
  61.    private Object commentKind;
  62.    private String commentContent;
  63.    private boolean commentStart;
  64.    private boolean optionStart;
  65.    private boolean defaultStart;
  66.    private String defaultContent;
  67.    private boolean fixedStart;
  68.    private String fixedContent;
  69.    private NotationDeclaration currentNotationDecl;
  70.    private ExternalGEDeclaration currentXGEDecl;
  71.    private boolean inProlog = true;
  72.    private Locator locator;
  73.    public URI logicalURI;
  74.  
  75.    public XSDLReader(SchemaIntf var1) {
  76.       this.schema = var1;
  77.    }
  78.  
  79.    public void error(String var1, int var2, int var3, int var4) {
  80.       ParserException var5 = new ParserException(var2, var1);
  81.       var5.setSource(String.valueOf(String.valueOf(String.valueOf(String.valueOf("See Line: ").concat(String.valueOf(var3))).concat(String.valueOf(" Column:"))).concat(String.valueOf(var4))).concat(String.valueOf(" in file.")));
  82.       var5.setSourceLinePos(var3);
  83.       this.schema.addError(var5);
  84.    }
  85.  
  86.    public void error(SAXParseException var1) {
  87.       this.error(((SAXException)var1).getMessage(), 240, this.locator.getLineNumber(), this.locator.getColumnNumber());
  88.    }
  89.  
  90.    public void fatalError(SAXParseException var1) {
  91.       this.error(var1);
  92.    }
  93.  
  94.    public void setDocumentLocator(Locator var1) {
  95.       this.locator = var1;
  96.    }
  97.  
  98.    public void parse(URI var1, URI var2) throws IOException {
  99.       this.logicalURI = var2;
  100.       Reader var4 = null;
  101.  
  102.       try {
  103.          Parser var3 = SchemaUtilities.getParser();
  104.          this.setDocumentLocator(new LocatorImpl());
  105.          var3.setEntityResolver(this);
  106.          var3.setErrorHandler(this);
  107.          var3.setDocumentHandler(this);
  108.          var4 = var1.createReader();
  109.          var3.parse(new InputSource(var4));
  110.       } catch (IOException var16) {
  111.          throw var16;
  112.       } catch (Exception var17) {
  113.          if (!(var17 instanceof IOException)) {
  114.          }
  115.       } finally {
  116.          try {
  117.             if (var4 != null) {
  118.                var4.close();
  119.             }
  120.          } catch (IOException var15) {
  121.          }
  122.  
  123.       }
  124.  
  125.    }
  126.  
  127.    public void startDocument() {
  128.       this.elemDecls = new Hashtable();
  129.       this.dtElemNames = new Hashtable();
  130.       this.currentAttrs = new Hashtable();
  131.       this.currentElemDecl = null;
  132.       this.currentDataTypeDecl = null;
  133.       this.topLevelElemName = null;
  134.       this.currentAttrDecl = null;
  135.       this.attrChoices = new Vector();
  136.       this.elemDeclAttrs = new Vector();
  137.       this.namespaces = new Hashtable();
  138.       this.isFirstLevelCM = true;
  139.       this.cmClosed = true;
  140.       this.cmConnectors = new Stack();
  141.       this.contentModels = new Stack();
  142.       this.commentKind = null;
  143.       this.commentContent = null;
  144.       this.commentStart = false;
  145.       this.optionStart = false;
  146.       this.fixedStart = false;
  147.       this.defaultStart = false;
  148.       this.fixedContent = null;
  149.       this.defaultContent = null;
  150.    }
  151.  
  152.    public void endDocument() {
  153.    }
  154.  
  155.    public void processingInstruction(String var1, String var2) throws SAXException {
  156.       ProcessingInstruction var3 = new ProcessingInstruction(var1, var2);
  157.       if (this.inProlog) {
  158.          ((BaseDeclaration)var3).setIsInProlog(true);
  159.       }
  160.  
  161.       this.schema.insertDeclaration(var3, (BaseDeclaration)null);
  162.    }
  163.  
  164.    private char getCurrentConnection() {
  165.       return (Character)this.cmConnectors.peek();
  166.    }
  167.  
  168.    private ContentModelTerm getCurrentParent() {
  169.       return (ContentModelTerm)this.contentModels.peek();
  170.    }
  171.  
  172.    public void startElement(String var1, AttributeList var2) {
  173.       this.inProlog = false;
  174.       this.parseElement(var1, var2);
  175.    }
  176.  
  177.    private void saveNamespaceInfo(String var1, String var2) {
  178.       int var4 = var1.indexOf(":");
  179.       if (var4 != -1) {
  180.          String var5 = var1.substring(var4 + 1);
  181.          NamespaceDeclaration var3 = new NamespaceDeclaration(var5, var2);
  182.          this.schema.insertDeclaration(var3, (BaseDeclaration)null);
  183.          this.namespaces.put(var2, var3);
  184.       }
  185.  
  186.    }
  187.  
  188.    private void doSchema(AttributeList var1) {
  189.       Object var2 = null;
  190.       Object var3 = null;
  191.       Object var4 = null;
  192.       Object var5 = null;
  193.       Object var6 = null;
  194.  
  195.       for(int var7 = 0; var7 < var1.getLength(); ++var7) {
  196.          String var8 = var1.getName(var7);
  197.          if (var8.equals("xmlns")) {
  198.             var1.getValue(var7);
  199.          } else if (var8.equals("version")) {
  200.             var1.getValue(var7);
  201.          } else if (var8.equals("targetNamespace")) {
  202.             var1.getValue(var7);
  203.          } else if (var8.equals("finalDefault")) {
  204.             var1.getValue(var7);
  205.          } else if (var8.equals("exactDefault")) {
  206.             var1.getValue(var7);
  207.          } else if (var8.startsWith("xmlns:")) {
  208.             this.saveNamespaceInfo(var8, var1.getValue(var7));
  209.          } else {
  210.             this.error(String.valueOf("Unrecognized attribute for 'schema' : ").concat(String.valueOf(var8)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  211.          }
  212.       }
  213.  
  214.    }
  215.  
  216.    private void doImport(AttributeList var1) {
  217.       String var2 = null;
  218.       String var3 = null;
  219.  
  220.       for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  221.          String var5 = var1.getName(var4);
  222.          if (var5.equals("schemaLocation")) {
  223.             var2 = var1.getValue(var4);
  224.          } else if (var5.equals("namespace")) {
  225.             var3 = var1.getValue(var4);
  226.          } else {
  227.             this.error(String.valueOf("Unrecognized attribute for 'import' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  228.          }
  229.       }
  230.  
  231.       Object var7 = null;
  232.       URI var6 = null;
  233.       if (var3 != null) {
  234.          NamespaceDeclaration var8 = (NamespaceDeclaration)this.namespaces.get(var3);
  235.          if (var8 == null) {
  236.             this.error(String.valueOf("Namespace not declared :").concat(String.valueOf(var3)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  237.             var8 = new NamespaceDeclaration("undefinedPrefix", var3);
  238.             this.schema.insertDeclaration(var8, (BaseDeclaration)null);
  239.             this.namespaces.put(var3, var8);
  240.          }
  241.  
  242.          if (var2 != null) {
  243.             var6 = new URI((URI)null, var2);
  244.          }
  245.  
  246.          if (var6 != null) {
  247.             ((BaseDeclaration)var8).setURI(var6);
  248.          }
  249.  
  250.       } else {
  251.          this.error("Namespace required for 'import'", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  252.       }
  253.    }
  254.  
  255.    private void doInclude(AttributeList var1) {
  256.       String var2 = null;
  257.  
  258.       for(int var3 = 0; var3 < var1.getLength(); ++var3) {
  259.          String var4 = var1.getName(var3);
  260.          if (var4.equals("schemaLocation")) {
  261.             var2 = var1.getValue(var3);
  262.          } else {
  263.             this.error(String.valueOf("Unrecognized attribute for 'include' : ").concat(String.valueOf(var4)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  264.          }
  265.       }
  266.  
  267.       if (var2 == null) {
  268.          this.error("The 'schemaLocation' attribute is required for 'include'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  269.       } else {
  270.          new URI((URI)null, var2);
  271.          URI var12 = new URI(this.logicalURI, var2);
  272.          String var5 = DTDUtilities.makeValidName(var12.getShortName());
  273.          if (this.schema.getNamedDeclaration(var5, Class.forName("com.extensibility.xml.ParameterEntityDeclaration")) == null) {
  274.             ExternalPEDeclaration var6 = new ExternalPEDeclaration(var5, (String)null, var12);
  275.             ((BaseDeclaration)var6).setURI(this.logicalURI);
  276.             this.schema.insertDeclaration(var6, (BaseDeclaration)null);
  277.  
  278.             try {
  279.                int var7 = this.schema.insertSubset(var6);
  280.                if (var7 > 0) {
  281.                   this.error(((BaseDeclaration)var6).getName(), 246, this.locator.getLineNumber(), this.locator.getColumnNumber());
  282.                }
  283.  
  284.                ExternalSubset var10000 = (ExternalSubset)this.schema.getNamedDeclaration(var5, Class.forName("com.extensibility.xml.ExternalSubset"));
  285.             } catch (UnknownHostException var9) {
  286.                this.error(var12.getFullName(), 245, this.locator.getLineNumber(), this.locator.getColumnNumber());
  287.             } catch (FileNotFoundException var10) {
  288.                this.error(var12.getShortName(), 244, this.locator.getLineNumber(), this.locator.getColumnNumber());
  289.             } catch (IOException var11) {
  290.                this.error(((Throwable)var11).getMessage(), 247, this.locator.getLineNumber(), this.locator.getColumnNumber());
  291.             }
  292.  
  293.          }
  294.       }
  295.    }
  296.  
  297.    private void doType(AttributeList var1) {
  298.       Object var2 = null;
  299.       String var3 = null;
  300.       Object var4 = null;
  301.       Object var5 = null;
  302.       Object var6 = null;
  303.       String var7 = null;
  304.       String var8 = null;
  305.  
  306.       for(int var9 = 0; var9 < var1.getLength(); ++var9) {
  307.          String var10 = var1.getName(var9);
  308.          if (var10.equals("abstract")) {
  309.             var1.getValue(var9);
  310.          } else if (var10.equals("content")) {
  311.             var3 = var1.getValue(var9);
  312.          } else if (var10.equals("derivedBy")) {
  313.             var1.getValue(var9);
  314.          } else if (var10.equals("exact")) {
  315.             var1.getValue(var9);
  316.          } else if (var10.equals("final")) {
  317.             var1.getValue(var9);
  318.          } else if (var10.equals("name")) {
  319.             var7 = var1.getValue(var9);
  320.          } else if (var10.equals("source")) {
  321.             var8 = var1.getValue(var9);
  322.          } else {
  323.             this.error(String.valueOf("Unrecognized attribute for 'type' : ").concat(String.valueOf(var10)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  324.          }
  325.       }
  326.  
  327.       if (var3 == null) {
  328.          var3 = "mixed";
  329.       }
  330.  
  331.       byte var11 = 0;
  332.       this.cmClosed = false;
  333.       if (var3.equals("empty")) {
  334.          var11 = 3;
  335.          this.cmClosed = true;
  336.       } else if (var3.equals("mixed")) {
  337.          var11 = 4;
  338.       } else if (var3.equals("textOnly")) {
  339.          var11 = 5;
  340.          this.cmClosed = true;
  341.       } else if (var3.equals("elementOnly")) {
  342.          var11 = 6;
  343.       } else {
  344.          var11 = 3;
  345.       }
  346.  
  347.       if (this.currentElemDecl == null) {
  348.          if (this.elemDecls.containsKey(var7)) {
  349.             this.currentElemDecl = (ElementDeclaration)this.elemDecls.get(var7);
  350.          } else {
  351.             this.currentElemDecl = new ElementDeclaration(var7, 3);
  352.             this.currentElemDecl.setURI(this.logicalURI);
  353.             this.elemDecls.put(var7, this.currentElemDecl);
  354.          }
  355.  
  356.          this.topLevelElemName = var7;
  357.       }
  358.  
  359.       this.currentCM = this.currentElemDecl.getContentModel();
  360.       this.currentCM.setContentModel(var11);
  361.       this.isFirstLevelCM = true;
  362.       if (var8 != null && this.currentElemDecl != null) {
  363.          this.currentElemDecl.setDataType(this.convertDataType(var8));
  364.       }
  365.  
  366.       this.cmConnectors.push(new Character(','));
  367.       this.contentModels.push(this.currentCM.getRootGroup());
  368.    }
  369.  
  370.    private void doAnnotation(AttributeList var1) {
  371.       for(int var2 = 0; var2 < var1.getLength(); ++var2) {
  372.          String var3 = var1.getName(var2);
  373.          this.error(String.valueOf("Unrecognized attribute for 'annotation' : ").concat(String.valueOf(var3)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  374.       }
  375.  
  376.    }
  377.  
  378.    private void doAttrGroup(AttributeList var1) {
  379.       Object var2 = null;
  380.       Object var3 = null;
  381.  
  382.       for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  383.          String var5 = var1.getName(var4);
  384.          if (var5.equals("name")) {
  385.             var1.getValue(var4);
  386.          } else if (var5.equals("ref")) {
  387.             var1.getValue(var4);
  388.          } else {
  389.             this.error(String.valueOf("Unrecognized attribute for 'attributeGroup' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  390.          }
  391.       }
  392.  
  393.    }
  394.  
  395.    private void doDataType(AttributeList var1) {
  396.       Object var2 = null;
  397.       Object var3 = null;
  398.       String var4 = null;
  399.       String var5 = null;
  400.  
  401.       for(int var6 = 0; var6 < var1.getLength(); ++var6) {
  402.          String var7 = var1.getName(var6);
  403.          if (var7.equals("abstract")) {
  404.             var1.getValue(var6);
  405.          } else if (var7.equals("final")) {
  406.             var1.getValue(var6);
  407.          } else if (var7.equals("name")) {
  408.             var4 = var1.getValue(var6);
  409.          } else if (var7.equals("source")) {
  410.             var5 = var1.getValue(var6);
  411.          } else {
  412.             this.error(String.valueOf("Unrecognized attribute for 'datatype' : ").concat(String.valueOf(var7)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  413.          }
  414.       }
  415.  
  416.       DataType var8;
  417.       if (var5 != null) {
  418.          var8 = this.convertDataType(var5);
  419.       } else {
  420.          var8 = this.convertDataType("string");
  421.       }
  422.  
  423.       if (this.currentAttrDecl != null) {
  424.          this.currentAttrDecl.setDataType(var8);
  425.       } else if (var4 != null) {
  426.          this.currentDataTypeDecl = new DataTypeDeclaration(var4, var8);
  427.          this.currentDataTypeDecl.setURI(this.logicalURI);
  428.          if (this.dtElemNames.containsKey(var4)) {
  429.             this.error(String.valueOf("datatype name used more than once: ").concat(String.valueOf(var4)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  430.          } else {
  431.             this.dtElemNames.put(var4, this.currentDataTypeDecl);
  432.          }
  433.       }
  434.  
  435.    }
  436.  
  437.    private void doElement(AttributeList var1) {
  438.       Object var2 = null;
  439.       Object var3 = null;
  440.       Object var4 = null;
  441.       Object var5 = null;
  442.       Object var6 = null;
  443.       Object var7 = null;
  444.       String var8 = null;
  445.       String var9 = null;
  446.       String var10 = null;
  447.       Object var11 = null;
  448.       String var12 = null;
  449.       String var13 = null;
  450.  
  451.       for(int var14 = 0; var14 < var1.getLength(); ++var14) {
  452.          String var15 = var1.getName(var14);
  453.          if (var15.equals("abstract")) {
  454.             var1.getValue(var14);
  455.          } else if (var15.equals("default")) {
  456.             var1.getValue(var14);
  457.          } else if (var15.equals("equivClass")) {
  458.             var1.getValue(var14);
  459.          } else if (var15.equals("exact")) {
  460.             var1.getValue(var14);
  461.          } else if (var15.equals("final")) {
  462.             var1.getValue(var14);
  463.          } else if (var15.equals("fixed")) {
  464.             var1.getValue(var14);
  465.          } else if (var15.equals("maxOccurs")) {
  466.             var9 = var1.getValue(var14);
  467.          } else if (var15.equals("minOccurs")) {
  468.             var8 = var1.getValue(var14);
  469.          } else if (var15.equals("name")) {
  470.             var10 = var1.getValue(var14);
  471.          } else if (var15.equals("nullable")) {
  472.             var1.getValue(var14);
  473.          } else if (var15.equals("ref")) {
  474.             var12 = var1.getValue(var14);
  475.          } else if (var15.equals("type")) {
  476.             var13 = var1.getValue(var14);
  477.          } else {
  478.             this.error(String.valueOf("Unrecognized attribute for 'element' : ").concat(String.valueOf(var15)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  479.          }
  480.       }
  481.  
  482.       Object var21 = null;
  483.       String var22;
  484.       if (var10 != null) {
  485.          var22 = var10;
  486.       } else if (var12 != null) {
  487.          var22 = var12;
  488.       } else {
  489.          var22 = "undefined";
  490.       }
  491.  
  492.       this.currentElemName = var22;
  493.       ElementDeclaration var16;
  494.       if (this.elemDecls.containsKey(var22)) {
  495.          var16 = (ElementDeclaration)this.elemDecls.get(var22);
  496.       } else {
  497.          var16 = new ElementDeclaration(var22, 3);
  498.          ((BaseDeclaration)var16).setURI(this.logicalURI);
  499.          this.elemDecls.put(var22, var16);
  500.       }
  501.  
  502.       if (this.currentElemDecl != null) {
  503.          char var17 = this.getCurrentConnection();
  504.          ContentModelTerm var18 = this.getCurrentParent();
  505.          char var19 = this.getOccurance(var8, var9);
  506.          ContentModelTerm var20 = new ContentModelTerm(new TypeRef(var22), var19, var17);
  507.          var18.addTerm(var20);
  508.       } else {
  509.          this.currentElemDecl = var16;
  510.          if (var13 != null) {
  511.             ContentModel var23 = var16.getContentModel();
  512.             var16.setDataType(this.convertDataType(var13));
  513.          }
  514.  
  515.          this.topLevelElemName = var10;
  516.       }
  517.  
  518.    }
  519.  
  520.    private void doGroup(AttributeList var1) {
  521.       String var2 = null;
  522.       String var3 = null;
  523.       String var4 = null;
  524.       String var5 = null;
  525.       Object var6 = null;
  526.  
  527.       for(int var7 = 0; var7 < var1.getLength(); ++var7) {
  528.          String var8 = var1.getName(var7);
  529.          if (var8.equals("maxOccurs")) {
  530.             var2 = var1.getValue(var7);
  531.          } else if (var8.equals("minOccurs")) {
  532.             var3 = var1.getValue(var7);
  533.          } else if (var8.equals("name")) {
  534.             var4 = var1.getValue(var7);
  535.          } else if (var8.equals("order")) {
  536.             var5 = var1.getValue(var7);
  537.          } else if (var8.equals("ref")) {
  538.             var1.getValue(var7);
  539.          } else {
  540.             this.error(String.valueOf("Unrecognized attribute for 'group' : ").concat(String.valueOf(var8)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  541.          }
  542.       }
  543.  
  544.       char var11;
  545.       if (var5 == null) {
  546.          var11 = ',';
  547.       } else if (var5.equals("seq")) {
  548.          var11 = ',';
  549.       } else if (var5.equals("choice")) {
  550.          var11 = '|';
  551.       } else if (var5.equals("all")) {
  552.          var11 = ',';
  553.       } else {
  554.          var11 = ',';
  555.       }
  556.  
  557.       ContentModelTerm var9 = new ContentModelTerm();
  558.       char var10 = this.getOccurance(var3, var2);
  559.       var9.setOccurance(var10);
  560.       var9.setConnection(this.getCurrentConnection());
  561.       if (var4 != null) {
  562.          var9.setLocalTag(var4);
  563.       }
  564.  
  565.       if (this.isFirstLevelCM) {
  566.          this.getCurrentParent().setLocalTag(var4);
  567.          this.getCurrentParent().setOccurance(var9.getMinOccurance(), var9.getMaxOccurance());
  568.          this.getCurrentParent().setConnection(var9.getConnection());
  569.          this.cmConnectors.pop();
  570.          this.cmConnectors.push(new Character(var11));
  571.       } else {
  572.          this.getCurrentParent().addTerm(var9);
  573.          this.contentModels.push(var9);
  574.          this.cmConnectors.push(new Character(var11));
  575.       }
  576.  
  577.       this.isFirstLevelCM = false;
  578.    }
  579.  
  580.    private void doNotation(AttributeList var1) {
  581.       String var2 = null;
  582.       String var3 = null;
  583.       String var4 = null;
  584.  
  585.       for(int var5 = 0; var5 < var1.getLength(); ++var5) {
  586.          String var6 = var1.getName(var5);
  587.          if (var6.equals("name")) {
  588.             var2 = var1.getValue(var5);
  589.          } else if (var6.equals("public")) {
  590.             var3 = var1.getValue(var5);
  591.          } else if (var6.equals("system")) {
  592.             var4 = var1.getValue(var5);
  593.          } else {
  594.             this.error(String.valueOf("Unrecognized attribute for 'notation' : ").concat(String.valueOf(var6)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  595.          }
  596.       }
  597.  
  598.       NotationDeclaration var7 = new NotationDeclaration(var2, var3, new URI((URI)null, var4));
  599.       this.schema.insertDeclaration(var7, (BaseDeclaration)null);
  600.       this.currentNotationDecl = var7;
  601.    }
  602.  
  603.    private void doKey(AttributeList var1) {
  604.       Object var2 = null;
  605.  
  606.       for(int var3 = 0; var3 < var1.getLength(); ++var3) {
  607.          String var4 = var1.getName(var3);
  608.          if (var4.equals("name")) {
  609.             var1.getValue(var3);
  610.          } else {
  611.             this.error(String.valueOf("Unrecognized attribute for 'key' : ").concat(String.valueOf(var4)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  612.          }
  613.       }
  614.  
  615.    }
  616.  
  617.    private void doKeyRef(AttributeList var1) {
  618.       Object var2 = null;
  619.       Object var3 = null;
  620.  
  621.       for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  622.          String var5 = var1.getName(var4);
  623.          if (var5.equals("name")) {
  624.             var1.getValue(var4);
  625.          } else if (var5.equals("refer")) {
  626.             var1.getValue(var4);
  627.          } else {
  628.             this.error(String.valueOf("Unrecognized attribute for 'keyref' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  629.          }
  630.       }
  631.  
  632.    }
  633.  
  634.    private void doUnique(AttributeList var1) {
  635.       Object var2 = null;
  636.  
  637.       for(int var3 = 0; var3 < var1.getLength(); ++var3) {
  638.          String var4 = var1.getName(var3);
  639.          if (var4.equals("name")) {
  640.             var1.getValue(var3);
  641.          } else {
  642.             this.error(String.valueOf("Unrecognized attribute for 'unique' : ").concat(String.valueOf(var4)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  643.          }
  644.       }
  645.  
  646.    }
  647.  
  648.    private void doAny(AttributeList var1) {
  649.       Object var2 = null;
  650.       Object var3 = null;
  651.       Object var4 = null;
  652.  
  653.       for(int var5 = 0; var5 < var1.getLength(); ++var5) {
  654.          String var6 = var1.getName(var5);
  655.          if (var6.equals("maxOccurs")) {
  656.             var1.getValue(var5);
  657.          } else if (var6.equals("minOccurs")) {
  658.             var1.getValue(var5);
  659.          } else if (var6.equals("namespace")) {
  660.             var1.getValue(var5);
  661.          } else {
  662.             this.error(String.valueOf("Unrecognized attribute for 'any' : ").concat(String.valueOf(var6)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  663.          }
  664.       }
  665.  
  666.    }
  667.  
  668.    private void doAnyAttribute(AttributeList var1) {
  669.       Object var2 = null;
  670.  
  671.       for(int var3 = 0; var3 < var1.getLength(); ++var3) {
  672.          String var4 = var1.getName(var3);
  673.          if (var4.equals("namespace")) {
  674.             var1.getValue(var3);
  675.          } else {
  676.             this.error(String.valueOf("Unrecognized attribute for 'anyAttribute' : ").concat(String.valueOf(var4)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  677.          }
  678.       }
  679.  
  680.    }
  681.  
  682.    private void doAppInfo(AttributeList var1) {
  683.       Object var2 = null;
  684.  
  685.       for(int var3 = 0; var3 < var1.getLength(); ++var3) {
  686.          String var4 = var1.getName(var3);
  687.          if (var4.equals("source")) {
  688.             var1.getValue(var3);
  689.          } else {
  690.             this.error(String.valueOf("Unrecognized attribute for 'appinfo' : ").concat(String.valueOf(var4)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  691.          }
  692.       }
  693.  
  694.       this.commentStart = true;
  695.    }
  696.  
  697.    private void doAttribute(AttributeList var1) {
  698.       String var2 = null;
  699.       String var3 = null;
  700.       String var4 = null;
  701.       Object var5 = null;
  702.       String var6 = null;
  703.       String var7 = null;
  704.  
  705.       for(int var8 = 0; var8 < var1.getLength(); ++var8) {
  706.          String var9 = var1.getName(var8);
  707.          if (var9.equals("default")) {
  708.             var2 = var1.getValue(var8);
  709.          } else if (var9.equals("fixed")) {
  710.             var3 = var1.getValue(var8);
  711.          } else if (var9.equals("maxOccurs")) {
  712.             var1.getValue(var8);
  713.          } else if (var9.equals("minOccurs")) {
  714.             var4 = var1.getValue(var8);
  715.          } else if (var9.equals("name")) {
  716.             var6 = var1.getValue(var8);
  717.          } else if (var9.equals("type")) {
  718.             var7 = var1.getValue(var8);
  719.          } else {
  720.             this.error(String.valueOf("Unrecognized attribute for 'attribute' : ").concat(String.valueOf(var9)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  721.          }
  722.       }
  723.  
  724.       DataType var12;
  725.       if (var7 != null) {
  726.          var12 = DataTypeFactory.createDataType(var7);
  727.       } else {
  728.          var12 = DataTypeFactory.createDataType("string");
  729.       }
  730.  
  731.       boolean var10 = false;
  732.       if (var4 != null && var4.equals("1")) {
  733.          var10 = true;
  734.       }
  735.  
  736.       String var11 = null;
  737.       if (var2 != null && var3 != null) {
  738.       }
  739.  
  740.       if (var2 != null) {
  741.          var11 = var2;
  742.       }
  743.  
  744.       if (var3 != null) {
  745.          var11 = var3;
  746.       }
  747.  
  748.       this.currentAttrDecl = new AttributeDeclaration(this.currentElemDecl, var6, var12, (Vector)null, var10, var11);
  749.       this.currentAttrDecl.setURI(this.currentElemDecl.getURI());
  750.       this.currentAttrs.put(var6, this.currentAttrDecl);
  751.       if (this.currentElemDecl != null) {
  752.          this.elemDeclAttrs.addElement(this.currentAttrDecl);
  753.       }
  754.  
  755.    }
  756.  
  757.    private void doField(AttributeList var1) {
  758.       for(int var2 = 0; var2 < var1.getLength(); ++var2) {
  759.          String var3 = var1.getName(var2);
  760.          this.error(String.valueOf("Unrecognized attribute for 'field' : ").concat(String.valueOf(var3)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  761.       }
  762.  
  763.    }
  764.  
  765.    private void doInfo(AttributeList var1) {
  766.       Object var2 = null;
  767.       Object var3 = null;
  768.  
  769.       for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  770.          String var5 = var1.getName(var4);
  771.          if (var5.equals("source")) {
  772.             var1.getValue(var4);
  773.          } else if (var5.equals("xml:lang")) {
  774.             var1.getValue(var4);
  775.          } else {
  776.             this.error(String.valueOf("Unrecognized attribute for 'info' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  777.          }
  778.       }
  779.  
  780.       this.commentStart = true;
  781.       this.commentKind = "USAGE";
  782.    }
  783.  
  784.    private void doRestrictions(AttributeList var1) {
  785.       for(int var2 = 0; var2 < var1.getLength(); ++var2) {
  786.          String var3 = var1.getName(var2);
  787.          this.error(String.valueOf("Unrecognized attribute for 'restrictions' : ").concat(String.valueOf(var3)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  788.       }
  789.  
  790.    }
  791.  
  792.    private void doSelector(AttributeList var1) {
  793.       for(int var2 = 0; var2 < var1.getLength(); ++var2) {
  794.          String var3 = var1.getName(var2);
  795.          this.error(String.valueOf("Unrecognized attribute for 'selector' : ").concat(String.valueOf(var3)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  796.       }
  797.  
  798.    }
  799.  
  800.    private void doSic(AttributeList var1) {
  801.       for(int var2 = 0; var2 < var1.getLength(); ++var2) {
  802.          String var3 = var1.getName(var2);
  803.          this.error(String.valueOf("Unrecognized attribute for 'sic' : ").concat(String.valueOf(var3)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  804.       }
  805.  
  806.    }
  807.  
  808.    private boolean isFacetTag(String var1) {
  809.       return var1.equals("encoding") || var1.equals("enumeration") || var1.equals("length") || var1.equals("maxExclusive") || var1.equals("maxInclusive") || var1.equals("maxlength") || var1.equals("minExclusive") || var1.equals("minInclusive") || var1.equals("minlength") || var1.equals("pattern") || var1.equals("period") || var1.equals("precision") || var1.equals("scale");
  810.    }
  811.  
  812.    private void doFacet(String var1, AttributeList var2) {
  813.       String var3 = null;
  814.  
  815.       for(int var4 = 0; var4 < var2.getLength(); ++var4) {
  816.          String var5 = var2.getName(var4);
  817.          if (var5.equals("value")) {
  818.             var3 = var2.getValue(var4);
  819.          } else {
  820.             this.error(String.valueOf(String.valueOf(String.valueOf("Unrecognized attribute for '").concat(String.valueOf(var1))).concat(String.valueOf("' facet element : "))).concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  821.          }
  822.       }
  823.  
  824.       Object var8 = null;
  825.       DataType var9;
  826.       if (this.currentAttrDecl != null) {
  827.          var9 = this.currentAttrDecl.getDataType();
  828.       } else {
  829.          if (this.currentDataTypeDecl == null) {
  830.             return;
  831.          }
  832.  
  833.          var9 = this.currentDataTypeDecl.getDataType();
  834.       }
  835.  
  836.       Object var6 = null;
  837.       Facet var7 = null;
  838.       if (var1.equals("enumeration")) {
  839.          this.attrChoices.addElement(var3);
  840.       } else {
  841.          Facet var10;
  842.          if (var1.equals("encoding")) {
  843.             var10 = new Facet(Facet.FACET_ENCODING_NAME, var3);
  844.          } else if (var1.equals("length")) {
  845.             var10 = new Facet(Facet.FACET_LENGTH_NAME, var3);
  846.          } else if (var1.equals("maxExclusive")) {
  847.             var10 = new Facet(Facet.FACET_MAX_NAME, var3);
  848.             var7 = new Facet(Facet.FACET_MAXEX_NAME, "true");
  849.          } else if (var1.equals("maxInclusive")) {
  850.             var10 = new Facet(Facet.FACET_MAX_NAME, var3);
  851.          } else if (var1.equals("maxlength")) {
  852.             var10 = new Facet(Facet.FACET_MAXLENGTH_NAME, var3);
  853.          } else if (var1.equals("minExclusive")) {
  854.             var10 = new Facet(Facet.FACET_MIN_NAME, var3);
  855.             var7 = new Facet(Facet.FACET_MINEX_NAME, "true");
  856.          } else if (var1.equals("minInclusive")) {
  857.             var10 = new Facet(Facet.FACET_MIN_NAME, var3);
  858.          } else if (var1.equals("minlength")) {
  859.             var10 = new Facet(Facet.FACET_MINLENGTH_NAME, var3);
  860.          } else if (var1.equals("pattern")) {
  861.             var10 = new Facet(Facet.FACET_PATTERN_NAME, var3);
  862.          } else if (var1.equals("period")) {
  863.             var10 = new Facet(Facet.FACET_PERIOD_NAME, var3);
  864.          } else if (var1.equals("precision")) {
  865.             var10 = new Facet(Facet.FACET_DIGITS_NAME, var3);
  866.          } else {
  867.             if (!var1.equals("scale")) {
  868.                return;
  869.             }
  870.  
  871.             var10 = new Facet(Facet.FACET_DECIMALS_NAME, var3);
  872.          }
  873.  
  874.          if (var10 != null) {
  875.             var9 = (DataType)var9.applyFacet(var10);
  876.          }
  877.  
  878.          if (var7 != null) {
  879.             var9 = (DataType)var9.applyFacet(var7);
  880.          }
  881.  
  882.          if (this.currentAttrDecl != null) {
  883.             this.currentAttrDecl.setDataType(var9);
  884.          } else {
  885.             if (this.currentDataTypeDecl == null) {
  886.                return;
  887.             }
  888.  
  889.             this.currentDataTypeDecl.setDataType(var9);
  890.          }
  891.  
  892.       }
  893.    }
  894.  
  895.    public void parseElement(String var1, AttributeList var2) {
  896.       if (var1.equals("schema")) {
  897.          this.doSchema(var2);
  898.       } else if (var1.equals("import")) {
  899.          this.doImport(var2);
  900.       } else if (var1.equals("include")) {
  901.          this.doInclude(var2);
  902.       } else if (var1.equals("type")) {
  903.          this.doType(var2);
  904.       } else if (var1.equals("annotation")) {
  905.          this.doAnnotation(var2);
  906.       } else if (var1.equals("attributeGroup")) {
  907.          this.doAttrGroup(var2);
  908.       } else if (var1.equals("datatype")) {
  909.          this.doDataType(var2);
  910.       } else if (var1.equals("element")) {
  911.          this.doElement(var2);
  912.       } else if (var1.equals("group")) {
  913.          this.doGroup(var2);
  914.       } else if (var1.equals("notation")) {
  915.          this.doNotation(var2);
  916.       } else if (var1.equals("key")) {
  917.          this.doKey(var2);
  918.       } else if (var1.equals("keyref")) {
  919.          this.doKeyRef(var2);
  920.       } else if (var1.equals("unique")) {
  921.          this.doUnique(var2);
  922.       } else if (var1.equals("any")) {
  923.          this.doAny(var2);
  924.       } else if (var1.equals("anyAttribute")) {
  925.          this.doAnyAttribute(var2);
  926.       } else if (var1.equals("appInfo")) {
  927.          this.doAppInfo(var2);
  928.       } else if (var1.equals("attribute")) {
  929.          this.doAttribute(var2);
  930.       } else if (var1.equals("field")) {
  931.          this.doField(var2);
  932.       } else if (var1.equals("info")) {
  933.          this.doInfo(var2);
  934.       } else if (var1.equals("restrictions")) {
  935.          this.doRestrictions(var2);
  936.       } else if (var1.equals("selector")) {
  937.          this.doSelector(var2);
  938.       } else if (var1.equals("sic")) {
  939.          this.doSic(var2);
  940.       } else if (this.isFacetTag(var1)) {
  941.          this.doFacet(var1, var2);
  942.       } else {
  943.          this.error(var1, 239, this.locator.getLineNumber(), this.locator.getColumnNumber());
  944.       }
  945.  
  946.    }
  947.  
  948.    private void saveElementDecl() {
  949.       if (this.currentElemDecl != null) {
  950.          this.schema.insertDeclaration(this.currentElemDecl, (BaseDeclaration)null);
  951.          this.currentElemDecl = null;
  952.  
  953.          for(int var1 = 0; var1 < this.elemDeclAttrs.size(); ++var1) {
  954.             AttributeDeclaration var2 = (AttributeDeclaration)this.elemDeclAttrs.elementAt(var1);
  955.             this.schema.insertDeclaration(var2, (BaseDeclaration)null);
  956.          }
  957.  
  958.          this.elemDeclAttrs.removeAllElements();
  959.          this.currentAttrs.clear();
  960.          if (!this.contentModels.empty()) {
  961.             this.contentModels.removeAllElements();
  962.          }
  963.  
  964.          if (!this.cmConnectors.empty()) {
  965.             this.cmConnectors.removeAllElements();
  966.          }
  967.  
  968.          this.cmClosed = true;
  969.          this.isFirstLevelCM = false;
  970.          this.topLevelElemName = null;
  971.       }
  972.    }
  973.  
  974.    public void endElement(String var1) {
  975.       if (var1.equals("type")) {
  976.          this.saveElementDecl();
  977.       } else if (var1.equals("group")) {
  978.          if (this.cmConnectors.size() > 1) {
  979.             this.cmConnectors.pop();
  980.          }
  981.  
  982.          if (this.contentModels.size() > 1) {
  983.             this.contentModels.pop();
  984.          }
  985.       } else if (var1.equals("element")) {
  986.          if (this.currentElemName != null && this.currentElemName.equals(this.topLevelElemName)) {
  987.             this.saveElementDecl();
  988.          }
  989.  
  990.          this.currentElemName = null;
  991.       } else if (var1.equals("attribute")) {
  992.          if (this.attrChoices.size() > 0) {
  993.             Vector var2 = new Vector();
  994.  
  995.             for(int var3 = 0; var3 < this.attrChoices.size(); ++var3) {
  996.                var2.addElement(this.attrChoices.elementAt(var3));
  997.             }
  998.  
  999.             this.currentAttrDecl.setChoices(var2);
  1000.          }
  1001.  
  1002.          this.currentAttrDecl = null;
  1003.          this.attrChoices.removeAllElements();
  1004.       } else if (var1.equals("datatype")) {
  1005.          if (this.currentDataTypeDecl != null) {
  1006.             if (this.attrChoices.size() > 0) {
  1007.                Vector var6 = new Vector();
  1008.  
  1009.                for(int var7 = 0; var7 < this.attrChoices.size(); ++var7) {
  1010.                   var6.addElement(this.attrChoices.elementAt(var7));
  1011.                }
  1012.  
  1013.                Facet var4 = new Facet(Facet.FACET_ENUM_NAME, var6);
  1014.                DataType var5 = this.currentDataTypeDecl.getDataType();
  1015.                var5 = (DataType)var5.applyFacet(var4);
  1016.                this.currentDataTypeDecl.setDataType(var5);
  1017.             }
  1018.  
  1019.             this.schema.insertDeclaration(this.currentDataTypeDecl, (BaseDeclaration)null);
  1020.          }
  1021.  
  1022.          this.currentDataTypeDecl = null;
  1023.          if (this.currentAttrDecl == null) {
  1024.             this.attrChoices.removeAllElements();
  1025.          }
  1026.       } else if (var1.equals("appInfo") || var1.equals("info")) {
  1027.          this.commentStart = false;
  1028.          if (this.currentAttrDecl != null) {
  1029.             this.currentAttrDecl.addComment(new Comment((String)this.commentKind, this.commentContent));
  1030.          } else if (this.currentElemDecl != null) {
  1031.             this.currentElemDecl.addComment(new Comment((String)this.commentKind, this.commentContent));
  1032.          } else if (this.currentDataTypeDecl != null) {
  1033.             this.currentDataTypeDecl.addComment(new Comment((String)this.commentKind, this.commentContent));
  1034.          } else {
  1035.             this.schema.addComment(new Comment((String)this.commentKind, this.commentContent));
  1036.          }
  1037.  
  1038.          this.commentKind = null;
  1039.          this.commentContent = null;
  1040.       }
  1041.  
  1042.    }
  1043.  
  1044.    public void characters(char[] var1, int var2, int var3) throws SAXException {
  1045.       if (this.commentStart) {
  1046.          this.commentContent = String.valueOf(var1, var2, var3);
  1047.       }
  1048.  
  1049.    }
  1050.  
  1051.    private DataType convertDataType(String var1) {
  1052.       String var2 = DataTypeIntf.STRING;
  1053.       if (var1 != null && var1.equals("binary")) {
  1054.          var2 = DataTypeIntf.BINBASE64;
  1055.       }
  1056.  
  1057.       if (var1.equals("integer")) {
  1058.          var2 = DataTypeIntf.INT;
  1059.       } else if (var1.equals("double")) {
  1060.          var2 = DataTypeIntf.R8;
  1061.       } else if (var1.equals("timeInstant")) {
  1062.          var2 = DataTypeIntf.DATETIME;
  1063.       } else {
  1064.          var2 = var1;
  1065.       }
  1066.  
  1067.       return DataTypeFactory.createDataType(var2);
  1068.    }
  1069.  
  1070.    protected char getOccurance(Object var1, Object var2) {
  1071.       char var3 = 0;
  1072.       if (var1 == null) {
  1073.          var1 = new String("1");
  1074.       }
  1075.  
  1076.       if (var2 == null) {
  1077.          var2 = new String("1");
  1078.       }
  1079.  
  1080.       if (((String)var1).equals("1") && ((String)var2).equals("1")) {
  1081.          var3 = 0;
  1082.       } else if (((String)var1).equals("0") && ((String)var2).equals("1")) {
  1083.          var3 = '?';
  1084.       } else if (((String)var1).equals("0") && ((String)var2).equals("*")) {
  1085.          var3 = '*';
  1086.       } else if (((String)var1).equals("1") && ((String)var2).equals("*")) {
  1087.          var3 = '+';
  1088.       } else {
  1089.          Debug.assert(false, String.valueOf(String.valueOf(String.valueOf(String.valueOf("minOccur=").concat(String.valueOf((String)var1))).concat(String.valueOf(", maxOccur="))).concat(String.valueOf((String)var2))).concat(String.valueOf(" not implemented yet!")));
  1090.       }
  1091.  
  1092.       return var3;
  1093.    }
  1094. }
  1095.